class Charge < ActiveRecord::Base
  
  # permet de créer une classe sans que la 
  # table correspondante existe dans la db
  class << self
    def table_name
      self.name.tableize
    end
  end

  #def abstract_class?
  #  return true
  #end

  # METHODES partagées par toutes les dépenses, factures, pulve, ...

  def all_parcelles?
    return self.parcelles.length.equal?(0)
  end
  
  def all_zones?
    return self.parcelles.length.equal?(0)
  end

  def include_zone?(zone)
    self.parcelles.each do |parcelle|
      if parcelle.zones.include?(zone)
        return true
      end
    end
    return false
  end
   
 
  # sum_surfaces
  # retourne la somme des surfaces de chaque parcelles associées à cette charge.
  # Si aucune parcelle n'est associée a cette charge, toutes les parcelles sont prises en compte.
  # [en cas de modif] Attention, normalement cette méthode ne devrait jamais retourner 0   
  def sum_surfaces
    s=0 
    if all_parcelles?
      parcelles = Parcelle.find(:all)
    else
      parcelles = self.parcelles
    end
    parcelles.each do |parcelle| 
      s = s + parcelle.surface
    end
    s
  end
  
  def get_cout_ha_col(col)
      return get_cout_ha_parcelle(col) if col.class.equal?(Parcelle)
      return get_cout_ha_zone(col) if col.class.equal?(Zone)
  end
  
  def get_cout_total_col(col)
    return get_cout_total_parcelle(col) if col.class.equal?(Parcelle)
    return get_cout_total_zone(col) if col.class.equal?(Zone)
  end
  
  def get_cout_total_parcelle(parcelle)
    return(parcelle.surface * self.get_cout_ha_parcelle(parcelle))
  end

  def get_cout_total_zone(zone)
    return(zone.surface * self.get_cout_ha_zone(zone))
  end


end
